package msb.class01;

import org.junit.Assert;
import org.junit.Test;
import common.util.ArrayUtil;

import java.util.List;

/**
 * 一个数组中有一种数出现了奇数次，其他数都出现了偶数次，怎么找到并打印这种数
 * <p>
 * 解题思路
 * 1.两个相同的数字异或后为0
 * 2.将所有数字异或后的值等于奇数次数字
 */
public class Code08_OneOddOtherEven {

    public static int getNum(int[] arr) {
        int result = 0;
        for (int num : arr) {
            result = result ^ num;
        }
        return result;
    }


    @Test
    public void check() {
        for (int i = 0; i < 10000; i++) {
            List<int[]> instant = ArrayUtil.instantOddAndEven(1);
            int[] arr = instant.get(0);
            int[] odds = instant.get(1);
            Assert.assertEquals(odds[0], getNum(arr));
        }
    }

}
